package com.hotel.component;

import com.hotel.dao.MenuDao;
import com.hotel.entity.Menu;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.sql.SQLException;
import java.util.Map;

/**
 * @Author Str
 * @Date 2021/10/29 15:46
 * @Description :
 */
/*
	创建类: ContextLifeListener
	{a}实现 ServletContextListener 接口
	{b}实现 contextInitialized 方法
	方法中做以下内容:
		{1}声明一个  map 数组
		{2}获取应用程序上下文对象。
		{3}getRoleMenuMap [*,1,2]
		{4}存入各角色菜单到应用程序域
		   MENU_*: 管理员, MENU_1: 经理
		   MENU_2: 前台营业员
*/
public class ContextLifeListener
        implements ServletContextListener {
    //{ps}向 ioc 容器索取 menuDao 来使用 (容器工厂)
    private MenuDao menuDao = (MenuDao)IocContainer.getBean("MenuDao");

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //{1}声明一个  map 数组
        Map<String, Menu>[] map = new Map[3];
        //{2}获取应用程序 [上下文对象]。
        ServletContext context = sce.getServletContext();
        try {
            //{3}获取三个角色的菜单
            //   [管理员(*), 酒店经理(1), 酒店前台(2)]
            map[0] = menuDao.getRoleMenuMap("*");
            map[1] = menuDao.getRoleMenuMap("1");
            map[2] = menuDao.getRoleMenuMap("2");
            //{4}存入各角色菜单到应用程序域
            //   MENU_*: 管理员, MENU_1: 经理
            //   MENU_2: 前台营业员
            context.setAttribute("MENU_*", map[0]);
            context.setAttribute("MENU_1", map[1]);
            context.setAttribute("MENU_2", map[2]);
        } catch (SQLException e) {
            e.printStackTrace();
        }
//        finally{
//            try {
//                JdbcUtils.closeConnection();
//            } catch (SQLException e) {
//                e.printStackTrace();
//            }
//        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce)
    { }
}
